#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Módulos 
import sys, gtk, pygame, utils, objetos
from pygame.locals import *

# Constantes

# Clases
# ---------------------------------------------------------------------
# clase de una letra de la palabra a ser ordenada        
class ObjetoGraficoTexto(pygame.sprite.Sprite):

	def __init__(self, texto, posx, posy, size, color, trsb=False ):
		texto = unicode(texto, "UTF-8")
		if trsb == True : 
			fuente = pygame.font.Font( "fonts//TRSB____.ttf", int(size*utils.RES))
		else:
			fuente = pygame.font.Font( "fonts//TRSL____.ttf", int(size*utils.RES))

		self.image = pygame.font.Font.render(fuente, texto, 1, color)
		self.rect = self.image.get_rect()
		self.rect.topleft = (posx, posy)

		self.valor = texto
		self.drag = False
		self.correcta = False

class ObjetoMovil(pygame.sprite.Sprite):

	def __init__(self, texto, posInicialx, posInicialy, posCorrectax, posCorrectay , size, color, trsb=False):
		texto = unicode(texto, "UTF-8")
		if trsb == True : 
			fuente = pygame.font.Font( "fonts//TRSB____.ttf", int(size*utils.RES))
		else:
			fuente = pygame.font.Font( "fonts//TRSL____.ttf", int(size*utils.RES))

		self.image = pygame.font.Font.render(fuente, texto, 1, color)
		self.rect = self.image.get_rect()
		self.rect.topleft = (posInicialx, posInicialy)

		self.valor = texto
		self.posInicialx = posInicialx
		self.posInicialy = posInicialy

 		self.listaCorrectax = list()
		self.listaCorrectax.append(posCorrectax)

 		self.listaCorrectay = list()
		self.listaCorrectay.append(posCorrectay)

		self.drag = False
		self.correcta = False


	def colocarPosicionInicial(self):
		self.rect.topleft = (self.posInicialx, self.posInicialy)
		self.correcta = False			

	def addDestino(self, x, y):
		self.listaCorrectax.append(x)
		self.listaCorrectay.append(y)

	def verificarPosCorrecta(self):
		for it in range(0, len(self.listaCorrectax)):	
			if self.verificarPosCorrectaPos(it) == True :
				return True
		return False

	def verificarPosCorrectaPos(self, i):
		x_actual, y_actual = self.rect.topleft

		if abs(x_actual - self.listaCorrectax[i]) < 10 and abs(y_actual - self.listaCorrectay[i]) < 10 :
			self.rect.topleft = (self.listaCorrectax[i], self.listaCorrectay[i])
			self.correcta = True
			#print("Esta en pos correcta  "+self.valor )
			return True
		else:
			#print "No esta en la pos correcta " + str(x_actual) + ";" + str(y_actual)
			return False



# ---------------------------------------------------------------------
# identifica si una letra esta siendo arrastrada
def detectar_arrastre(objectosGraficos):
	x,y = pygame.mouse.get_pos()
	for item in objectosGraficos:
		if(item.rect.collidepoint(pygame.mouse.get_pos())):
			#print "Collite"
			item.drag = True

def soltar(objectosGraficos):
	for objGrafico in objectosGraficos:
		if objGrafico.drag == True:
			objGrafico.drag = False
			#print("Suelta objGrafico")
			if not(objGrafico.verificarPosCorrecta()) :
				#print("vuelve a la posicion original")
				objGrafico.colocarPosicionInicial()


#mueve las letras si estan siendo arrastradas por el mouse
def actualizar_objetos(objectosGraficos):
	for item in objectosGraficos:
		if(item.drag == True):
			item.rect.centerx,item.rect.centery = pygame.mouse.get_pos()


			
def dibujar(screen,cursor_picture, clock):
    salir = 0
    background_image = utils.load_image('images/fondo2.png')

    #boton de la flecha para continuar
    btn_adelante = objetos.BotonAdelante()
    btn_atras = objetos.BotonAtras()

    #texto superior derecho que indica el numero de clase
    clase2, clase2_rect = utils.texto_clase("Clase 2", 750*utils.RES, 15*utils.RES)
    texto_final,texto_final_rect = utils.texto_subtitulo('¡Excelente ahora estan todos ordenados!', 400*utils.RES,460*utils.RES)
    

    azul = (50,50,255)    
    negro = (0,0,0)    
    tamLetra = 22
    objetosGraficos = list()

    # Habla Beto
    x = 120
    #objetosGraficos.append( ObjetoGraficoTexto(".................................................................................",  
			   #(100)*utils.RES,  90*utils.RES,  20,  azul, True ) )

    objetosGraficos.append( ObjetoGraficoTexto("BETO DICE: ",  
			   (x)*utils.RES,  (120)*utils.RES,  tamLetra,  negro, True ) )
    objetosGraficos.append( ObjetoGraficoTexto("No sólo se __ __ __ __ __ __ __ __ __ __  los ríos, mares y",  
			   (x + 100)*utils.RES,  (120)*utils.RES,  tamLetra,  negro ) )
    objetosGraficos.append( ObjetoGraficoTexto("__ __ __ __ __  sino también, los ríos que corren por debajo de la" ,  
			   (x)*utils.RES,  (150)*utils.RES,  tamLetra,  negro ) )
    objetosGraficos.append( ObjetoGraficoTexto("__ __ __ __ __ __  , llamadas aguas subterráneas.",  
			   (x)*utils.RES,  (180)*utils.RES,  tamLetra,  negro ) )

    #objetosGraficos.append( ObjetoGraficoTexto(".................................................................................",  
	#		   (100)*utils.RES,  205*utils.RES,  20,  azul, True ) )

    # Habla Trueno
    x = 130
    y = 280
    #objetosGraficos.append( ObjetoGraficoTexto("..........................................................................................",  
	#		   (x)*utils.RES,  y*utils.RES,  20,  azul, True ) )

    objetosGraficos.append( ObjetoGraficoTexto("DICE TRUENO: ",  
			   (x)*utils.RES,  (y+30)*utils.RES,  tamLetra,  negro, True ) )
    objetosGraficos.append( ObjetoGraficoTexto("¡Claro! Los efluentes, o sea, los desechos líquidos que",  
			   (x + 125)*utils.RES,  (y+30)*utils.RES,  tamLetra,  negro ) )

    objetosGraficos.append( ObjetoGraficoTexto("__ __ __ __ __ __ __ __ __  sobre el suelo, sin tratamiento previo, pueden" ,  
			   (x)*utils.RES,  (y+65)*utils.RES,  tamLetra,  negro ) )

    objetosGraficos.append( ObjetoGraficoTexto("__ __ __ __ __ __ __ __ __  hasta encontrar a esos __ __ __ __ subterrános ",  
			   (x)*utils.RES,  (y+95)*utils.RES,  tamLetra,  negro ) )

    objetosGraficos.append( ObjetoGraficoTexto("contaminando el agua y las tierras, y provocando enfermedades.",
			   (x)*utils.RES,  (y+125)*utils.RES,  tamLetra,  negro ) )


    objetosGraficosLetras = list()
    # PALABRA: CONTAMINAN
    x = 40
    saltox = 17
    y = 60
    objetosGraficosLetras.append(ObjetoMovil("C", x + (4*saltox), y, 315, 112 , 27, azul, True))
    objetosGraficosLetras.append(ObjetoMovil("O", x + (5*saltox), y, 341, 112 , 27, azul, True))

    om1 = ObjetoMovil("N", x + (3*saltox), y, 368, 112 , 27, azul, True)
    om1.addDestino(504,112)
    om1.addDestino(559,112)
    objetosGraficosLetras.append(om1)

    objetosGraficosLetras.append(ObjetoMovil("T", x + (10*saltox), y, 394, 112 , 27, azul, True))

    om2 = ObjetoMovil("A", x + (2*saltox), y, 423, 112 , 27, azul, True)
    om2.addDestino(531, 112)
    objetosGraficosLetras.append(om2)
    
    objetosGraficosLetras.append(ObjetoMovil("M", x + saltox , y, 446, 112 , 27, azul, True))
    objetosGraficosLetras.append(ObjetoMovil("I", x + (8*saltox), y, 481, 112 , 27, azul, True))

    om3 = ObjetoMovil("N", x + (6*saltox), y, 368, 112 , 27, azul, True)
    om3.addDestino(504,112)
    om3.addDestino(559,112)
    objetosGraficosLetras.append(om3)

    om4 = ObjetoMovil("A", x + (7*saltox), y, 423, 112 , 27, azul, True)
    om4.addDestino(531,112)
    objetosGraficosLetras.append(om4)

    om5 = ObjetoMovil("N", x + (9*saltox), y, 368, 112 , 27, azul, True)
    om5.addDestino(504,112)
    om5.addDestino(559,112)
    objetosGraficosLetras.append(om5)
 

    # PALABRA: LAGOS - SLGOA
    x = 300
    saltox = 14
    objetosGraficosLetras.append(ObjetoMovil("S", x +   (saltox), y, 237, 140 , 27, azul, True))
    objetosGraficosLetras.append(ObjetoMovil("L", x + (2*saltox), y, 124, 140 , 27, azul, True))
    objetosGraficosLetras.append(ObjetoMovil("G", x + (3*saltox), y, 175, 140 , 27, azul, True))
    objetosGraficosLetras.append(ObjetoMovil("O", x + (4*saltox), y, 206, 140 , 27, azul, True))
    objetosGraficosLetras.append(ObjetoMovil("A", x + (5*saltox), y, 150, 140 , 27, azul, True))


    # PALABRA: TIERA - RTIRAE
    x = 500
    saltox = 14
    om = ObjetoMovil("R", x +   (saltox), y, 207, 173 , 27, azul, True)
    om.addDestino(233,173)
    objetosGraficosLetras.append(om)
    objetosGraficosLetras.append(ObjetoMovil("T", x + (2*saltox), y, 124, 173 , 27, azul, True))
    objetosGraficosLetras.append(ObjetoMovil("I", x + (3*saltox), y, 153, 173 , 27, azul, True))

    om2 = ObjetoMovil("R", x +   (4*saltox), y, 207, 173 , 27, azul, True)
    om2.addDestino(233,173)
    objetosGraficosLetras.append(om2)
    objetosGraficosLetras.append(ObjetoMovil("A", x + (5*saltox), y, 263, 173 , 27, azul, True))
    objetosGraficosLetras.append(ObjetoMovil("E", x + (6*saltox), y, 181, 173 , 27, azul, True))



    # PALABRA:  ARROJAMOS - JAAROMOSR 
    x = 40
    saltox = 14
    y = 270
    om = ObjetoMovil("A", x +   (2 * saltox), y, 133, 337 , 27, azul, True)
    om.addDestino(268,337)
    objetosGraficosLetras.append(om)

    om = ObjetoMovil("A", x +   (3 * saltox), y, 133, 337 , 27, azul, True)
    om.addDestino(268,337)
    objetosGraficosLetras.append(om)

    om2 = ObjetoMovil("R", x +   (4*saltox), y, 160, 337 , 27, azul, True)
    om2.addDestino(187,337)
    objetosGraficosLetras.append(om2)

    om2 = ObjetoMovil("R", x +   (9*saltox), y, 160, 337 , 27, azul, True)
    om2.addDestino(187,337)
    objetosGraficosLetras.append(om2)

    om2 = ObjetoMovil("O", x +   (5*saltox), y, 215, 337 , 27, azul, True)
    om2.addDestino(321,337)
    objetosGraficosLetras.append(om2)

    om2 = ObjetoMovil("O", x +   (7*saltox), y, 215, 337 , 27, azul, True)
    om2.addDestino(321,337)
    objetosGraficosLetras.append(om2)

    objetosGraficosLetras.append(ObjetoMovil("J", x + (1*saltox), y, 247, 337 , 27, azul, True))
    objetosGraficosLetras.append(ObjetoMovil("M", x + (6*saltox), y, 296, 337 , 27, azul, True))
    objetosGraficosLetras.append(ObjetoMovil("S", x + (8*saltox), y, 349, 337 , 27, azul, True))


    # PALABRA: FILTRARSE - AFRSETRIL
    x = 300
    saltox = 14
    y = 270
    y_correcto = 368
    om = ObjetoMovil("R", x +   (3 * saltox), y, 244, y_correcto , 27, azul, True)
    om.addDestino(297,y_correcto)
    objetosGraficosLetras.append(om)

    om = ObjetoMovil("R", x +   (7 * saltox), y, 244, y_correcto , 27, azul, True)
    om.addDestino(297,y_correcto)
    objetosGraficosLetras.append(om)

    objetosGraficosLetras.append(ObjetoMovil("F", x + (2*saltox), y, 137, y_correcto , 27, azul, True))
    objetosGraficosLetras.append(ObjetoMovil("I", x + (8*saltox), y, 163, y_correcto , 27, azul, True))
    objetosGraficosLetras.append(ObjetoMovil("L", x + (9*saltox), y, 188, y_correcto , 27, azul, True))
    objetosGraficosLetras.append(ObjetoMovil("T", x + (6*saltox), y, 215, y_correcto , 27, azul, True))
    objetosGraficosLetras.append(ObjetoMovil("A", x + (1*saltox), y, 270, y_correcto , 27, azul, True))
    objetosGraficosLetras.append(ObjetoMovil("S", x + (4*saltox), y, 325, y_correcto , 27, azul, True))
    objetosGraficosLetras.append(ObjetoMovil("E", x + (5*saltox), y, 348, y_correcto , 27, azul, True))


    # PALABRA: RIOS : ORIS
    x = 500
    saltox = 14
    y = 270
    objetosGraficosLetras.append(ObjetoMovil("O", x + (1*saltox), y, 630, 367 , 27, azul, True))
    objetosGraficosLetras.append(ObjetoMovil("R", x + (2*saltox), y, 577, 367 , 27, azul, True))
    objetosGraficosLetras.append(ObjetoMovil("I", x + (3*saltox), y, 605, 367 , 27, azul, True))
    objetosGraficosLetras.append(ObjetoMovil("S", x + (4*saltox), y, 662, 367 , 27, azul, True))


    while salir == 0:
    
    	# Pump GTK messages.
		while gtk.events_pending():
			gtk.main_iteration()
			
		for eventos in pygame.event.get():
			if eventos.type == QUIT:
				sys.exit(0)
			elif eventos.type == pygame.VIDEORESIZE:
			   pygame.display.set_mode(eventos.size, pygame.RESIZABLE)	
			elif eventos.type == MOUSEBUTTONDOWN:
				if btn_adelante.rect.collidepoint(pygame.mouse.get_pos()):
					salir = 10
					btn_adelante.sonido.play()	
				elif btn_atras.rect.collidepoint(pygame.mouse.get_pos()):
					salir = 8
					btn_atras.sonido.play()	
				detectar_arrastre(objetosGraficosLetras)

			elif eventos.type == MOUSEBUTTONUP:
				soltar(objetosGraficosLetras)

				
		# Realiza la animacion del texto				
		actualizar_objetos(objetosGraficosLetras)

		screen.blit(background_image, (0, 0))
		screen.blit(clase2, clase2_rect)

		for og in objetosGraficos:
			screen.blit(og.image,og.rect)

		for ogl in objetosGraficosLetras:
			screen.blit(ogl.image,ogl.rect)

	
		screen.blit(btn_adelante.image, btn_adelante.rect)
		screen.blit(btn_atras.image, btn_atras.rect)		
		screen.blit(cursor_picture, pygame.mouse.get_pos())
		pygame.display.flip()

		# Try to stay at 30 FPS
		clock.tick(30)
                	 
    return salir

# This function is called when the game is run directly from the command line:
# ./TestGame.py 
def main():
	
	pygame.init()
	screen = pygame.display.set_mode((int(800*utils.RES), int(520*utils.RES)), pygame.RESIZABLE) #pygame.display.get_surface() #

	# Fake a Sugar cursor for the pyGame canvas area
	pygame.mouse.set_cursor((8,8),(0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0))
	cursor_picture = pygame.image.load('images/standardcursor.png')
	cursor_picture.convert_alpha() 
	clock = pygame.time.Clock()
	dibujar(screen,cursor_picture,clock)

if __name__ == '__main__':
   main()
